package org.example.ai04.controller;

import org.example.ai04.entity.User;
import org.example.ai04.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 管理员控制器
 * 提供用户管理等管理员功能的API接口
 * 需要ADMIN角色权限访问
 */
@RestController
@RequestMapping("/api/admin")
public class AdminController {

    // 注入用户仓库，用于访问用户数据
    @Autowired
    private UserRepository userRepository;

    // 注入密码编码器，用于密码加密
    @Autowired
    private PasswordEncoder passwordEncoder;

    /**
     * 获取所有用户列表
     * @return 用户列表
     */
    @GetMapping("/users")
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    /**
     * 根据ID获取单个用户信息
     * @param id 用户ID
     * @return 用户信息或404未找到响应
     */
    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        Optional<User> user = userRepository.findById(id);
        return user.map(ResponseEntity::ok)
                  .orElse(ResponseEntity.notFound().build());
    }

    /**
     * 创建新用户
     * @param user 用户信息
     * @return 创建成功的用户信息或400错误响应
     */
    @PostMapping("/users")
    public ResponseEntity<User> createUser(@RequestBody User user) {
        // 检查用户名是否已存在
        if (userRepository.findByUsername(user.getUsername()).isPresent()) {
            return ResponseEntity.badRequest().build();
        }
        
        // 加密密码
        user.setPassword(passwordEncoder.encode(user.getPassword()));
        // 设置用户角色，默认为USER
        user.setRole(user.getRole() != null ? user.getRole() : "USER");
        
        User savedUser = userRepository.save(user);
        return ResponseEntity.ok(savedUser);
    }

    /**
     * 更新用户信息
     * @param id 用户ID
     * @param userDetails 更新的用户信息
     * @return 更新后的用户信息或404未找到响应
     */
    @PutMapping("/users/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User userDetails) {
        return userRepository.findById(id)
                .map(user -> {
                    // 更新用户基本信息
                    user.setUsername(userDetails.getUsername());
                    user.setEmail(userDetails.getEmail());
                    user.setRole(userDetails.getRole());
                    
                    // 如果提供了新密码，则更新密码
                    if (userDetails.getPassword() != null && !userDetails.getPassword().isEmpty()) {
                        user.setPassword(passwordEncoder.encode(userDetails.getPassword()));
                    }
                    
                    User updatedUser = userRepository.save(user);
                    return ResponseEntity.ok(updatedUser);
                })
                .orElse(ResponseEntity.notFound().build());
    }

    /**
     * 删除用户
     * @param id 用户ID
     * @return 成功响应或404未找到响应
     */
    @DeleteMapping("/users/{id}")
    public ResponseEntity<?> deleteUser(@PathVariable Long id) {
        if (userRepository.existsById(id)) {
            userRepository.deleteById(id);
            return ResponseEntity.ok().build();
        }
        return ResponseEntity.notFound().build();
    }

    /**
     * 重置用户密码
     * @param id 用户ID
     * @param request 包含新密码的请求体
     * @return 更新后的用户信息或404未找到响应
     */
    @PutMapping("/users/{id}/reset-password")
    public ResponseEntity<User> resetPassword(@PathVariable Long id, @RequestBody Map<String, String> request) {
        return userRepository.findById(id)
                .map(user -> {
                    // 获取新密码并加密
                    String newPassword = request.get("newPassword");
                    user.setPassword(passwordEncoder.encode(newPassword));
                    User updatedUser = userRepository.save(user);
                    return ResponseEntity.ok(updatedUser);
                })
                .orElse(ResponseEntity.notFound().build());
    }
}